Listing 1 supplies the component dispatchers for the preview component together with the can do, version, open, and close functions.
Listing 1 Implementing the required Component Manager functions
typedef struct {
ComponentInstance self;
} PICSPreviewRecord, **PICSPreviewGlobals;
/* entry point for all Component Manager requests */
pascal ComponentResult PICSPreviewDispatch
(ComponentParameters *params, Handle store)
{
OSErr err = badComponentSelector;
ComponentFunction componentProc = 0;
switch (params->what) {
case kComponentOpenSelect:
componentProc = PICSPreviewOpen; break;
case kComponentCloseSelect:
componentProc = PICSPreviewClose; break;
case kComponentCanDoSelect:
componentProc = PICSPreviewCanDo; break;
case kComponentVersionSelect:
componentProc = PICSPreviewVersion; break;
case kPreviewShowDataSelector:
componentProc = PICSPreviewShowData; break;
}
if (componentProc)
err = CallComponentFunctionWithStorage (store, params,
componentProc);
return err;
}
pascal ComponentResult PICSPreviewCanDo
(PICSPreviewGlobals store, short ftnNumber)
{
switch (ftnNumber) {
case kComponentOpenSelect:
case kComponentCloseSelect:
case kComponentCanDoSelect:
case kComponentVersionSelect:
case kPreviewShowDataSelector:
return true;
default:
return false;
}
}
pascal ComponentResult PICSPreviewVersion
(PICSPreviewGlobals store)
{
return 0x00010001;
}
pascal ComponentResult PICSPreviewOpen (PICSPreviewGlobals store,
ComponentInstance self)
{
store = (PICSPreviewGlobals)NewHandle
(sizeof (PICSPreviewRecord));
if (!store) return MemError();
SetComponentInstanceStorage (self, (Handle)store);
(**store).self = self;
return noErr;
}
pascal ComponentResult PICSPreviewClose
(PICSPreviewGlobals store,
ComponentInstance self)
{
if (store) DisposeHandle ((Handle)store);
return noErr;
}